package com.maxatime.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 根据用户生日精确计算年龄
 * 用Calender对象取得当前日期对象--从对象中分别取出年月日
 * @author Administrator
 *
 */
class getAgeByBirthday{
    public static int getAgeByBirth(Date birthday){
        //Calendar：日历
        /*从Calendar对象中或得一个Date对象*/
        Calendar cal = Calendar.getInstance();
        /*把出生日期放入Calendar类型的bir对象中，进行Calendar和Date类型进行转换*/
        Calendar bir = Calendar.getInstance();
        bir.setTime(birthday);
        /*如果生日大于当前日期，则抛出异常：出生日期不能大于当前日期*/
        if(cal.before(birthday)){
            throw new IllegalArgumentException("The birthday is before Now,It's unbelievable");
        }
        /*取出当前年月日*/
        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH);
        int dayNow = cal.get(Calendar.DAY_OF_MONTH);
        /*取出出生年月日*/
        int yearBirth = bir.get(Calendar.YEAR);
        int monthBirth = bir.get(Calendar.MONTH);
        int dayBirth = bir.get(Calendar.DAY_OF_MONTH);
        /*大概年龄是当前年减去出生年*/
        int age = yearNow - yearBirth;
        /*如果出当前月小与出生月，或者当前月等于出生月但是当前日小于出生日，那么年龄age就减一岁*/
        if(monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)){
            age--;
        }
        return age;
    }
    /*main方法测试*/
    public static void main(String[] args){
        SimpleDateFormat sft = new SimpleDateFormat("yyyy-MM-dd");
        String sftBirth = "1980-4-25";
        Date date = null;
        try{
            date = sft.parse(sftBirth);
        }catch(Exception e){
            e.printStackTrace();
        }
        int age = getAgeByBirthday.getAgeByBirth(date);
        System.out.print("年龄=" + age + "岁");
    }
}